There are known memories, where data programming into the memory and reading the stored data is performed in larger units instead of bytes/words. For example, NAND memories and NOR memories consist of memory cell matrices. Each line of this type of a matrix forms one page. Larger assemblies (blocks) can be gathered from these lines, in which case a part of memory operations is page-specific and a part relates to one or more blocks. The size of a page is, for example, in a 64-megabyte NAND memory 528 bytes, from which 16 bytes are so called Spare bytes, i.e. the number of usable bytes on one page is 512. In this example memory, one block consists of 16 pages, but other block sizes can also be used. In this description, such memories are also called block memories.
NAND memories do not include an address bus, but communicating the addresses to the memory is performed via a data bus. The width of the data bus is typically 8 bits. Typically, in NAND memories the programming of data into the memory and reading the data from the memory is performed one page at a time, but, for example, erasing the memory (setting the memory cell to a certain value, either to a 0-status or to a 1-status) is performed by blocks. Changing the data of an individual byte requires rewriting the data of that entire page where the byte to be changed is located. The use of this type of memory is somewhat more complicated than the use of a conventional Random Access Memory (RAM). When data is written to this type of memory, the operation is typically such, that the processor of a device sends the data to be stored one page at a time to the memory controller, which forwards the data to the memory. The memory is first informed the address of the programming location, typically the base address of the page. This takes place in such a manner, that a command referring to this is set to the I/O bus, after which a pulse is set to the command line, in which case the memory reads the command in the I/O bus. In addition to the command, also the address of the programming location is provided this way. In the next step, sending the data from the pages to be saved from the memory controller to the memory is started, typically bit by bit. There is cache in the memory, where the page to be stored into the memory is written.
After storing the data, the validity of programming is checked. In some memories according to the prior art this is performed automatically after each stored page by comparing the stored data to the data that was to be stored. The status of the comparison is stored into a status register inside the memory. The status of this status register can be checked after the programming by sending a command to read the status register to the memory, which the memory answers with the contents of the status register. Thus, the memory controller can, on the basis of this status data, conclude whether the data was stored correctly. In order to send the status data of programming, the memory controller communicates, for example, an interrupt request to the processor, which on the basis of this reads the status data sent by the memory controller. This type of an arrangement has e.g. the disadvantage that interrupts come to the processor after the processing of each page, even though the data would be stored in the memory correctly. The amount of data to be stored can be quite large, in which case there are many interrupts, which slows down the operation of the processor.
There are several memory structures as described above, which are based on different techniques, such as NAND, XOR, etc. However, what these memories have in common is that the data remains in them after the operating voltages are removed, i.e. they are so-called non-volatile memories. In addition, the programming of data to this type of non-volatile memory is slower than dynamic and static random access memories.
Non-volatile memories can be arranged as memory cards, which can be attached to an electronic device in a releasable manner. This type of memory card can thus be moved from one device to another, which makes it possible to e.g. transfer data between devices. For example, in a digital camera the images can be stored into a memory card. After programming the memory card can be removed from the digital camera and placed, for example, in a computer or a mobile communication device. Thus the images can be read from the memory card into the memory of this other device. Other memory card applications include the programming of program files, videos, music, text files, etc.
Even though it has been presented above that a memory controller has been arranged for memory processing, via which the transmission of data between the processor and memory is performed, it is clear that the processor can control the memory directly as well. Thus, however, the load in the processor caused by the memory processing is even greater than when using a memory controller.